package xaj.puiatti.ast;

import java.util.List;
import polyglot.ast.Block;
import polyglot.ast.Expr;
import polyglot.lex.Identifier;
import polyglot.types.Flags;
import polyglot.util.Position;
import abc.aspectj.ast.AdviceSpec;
import abc.aspectj.ast.Pointcut;
import xaj.scc.ast.SCNodeFactory;

public interface PuiattiNodeFactory extends SCNodeFactory {
	
   NamedAdviceDecl NamedAdviceDecl(Position pos,
			Identifier ident,
            Flags flags,
            AdviceSpec spec,
            List throwTypes,
            Pointcut pc,
            Block body);

    PCRule PCRule(Position pos,
            Identifier id1,
            Identifier id2,
            RuleCond rc,
            DeclRuleBody b);

    RuleCond RuleCond(Position pos,
            List pa, Condic c);

    Condic Condic(Position pos, Expr expr);

    DeclRuleBody DeclRuleBody(Position pos, List m);

    BlockRule BlockRule(Position pos);

    Prec Prec(Position pos, Identifier id1, Identifier id2);

    Ignore Ignore(Position pos, Identifier id1);

    Last Last(Position pos, Identifier id1);

    First First(Position pos, Identifier id1);
}
